聊两个问题,它们看似和推荐系统没有必然关系,但实际上,在你构建自己的推荐系统的时候,不可避免地会遇到这两个问题。
去重是刚需
在推荐系统中,有一个刚需就是去重,那么说在哪些地方有去重的需求呢?
主要是在两个地方:一个是内容源去重,另一个是不重复给用户推荐。
聊两个问题,它们看似和推荐系统没有必然关系,但实际上,在你构建自己的推荐系统的时候,不可避免地会遇到这两个问题。
在推荐系统中,有一个刚需就是去重,那么说在哪些地方有去重的需求呢?
主要是在两个地方:一个是内容源去重,另一个是不重复给用户推荐。
数据库(DataBase,DB)是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。它是一个按数据结构来存储和管理数据的计算机软件系统。即数据库包含两层含义:保管数据的“仓库”以及数据管理的方法和技术。
数据库的特点包括:
表:在关系数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型、数据宽度等。
数据类型:决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:整数数据类型,浮点数数据类型,精确小数类型,二进制数据类型,日期/时间数据类型,字符串数据类型。
主键(PRIMARY KEY)又称主码,用于唯一地标识表中得每一条记录。可以定义表中的一列或多列为主键,主键列上没有两行相同的值,也不能为空值。假如,下表给每一个作者分配一个“编号”,该编号作为表数据表的主键,如果出现相同的值,将提示错误,系统不能确定查询的究竟是哪一条记录;如果把作者的“姓名”作为主键,则不能出现重复的名字,这与现实不相符合,因此“姓名”字段不适合做为主键。
什么是开源:
PostgreSQL是一个开源数据库管理系统,那么什么是开源呢?开源是开放源码的简称,是被非赢利软件组织(美国的Open Source Initiative协会)注册为认证标记,并对其进行了正式的定义,用于描述那些源码可以被公众使用的软件,并且此软件的使用、修改和发行也不受许可证的限制。这意味着软件在提供的时候,同时提供了源码。开源许可赋予用户使用、修改和重新发布它而不需要付许可费用的权力。
数据库技术构成:
1.数据库系统有3个主要的组成部分。
⑴ 数据库:用于存储数据的地方。
⑵ 数据库管理系统:用于管理数据库的软件。
⑶ 数据库应用程序:为了提高数据库系统的处理能力所使用的管理
数据库的软件补充。
2.sql语言
对数据库进行查询和修改操作的语言叫做SQL。SQL的含义是结构化查询语言。SQL语言包含4个部分。
⑴ 数据定义语言(DDL):DROP、CREATE、ALTER等语句。
⑵ 数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。
⑶ 数据查询语言(DQL):SELECT语句。
⑷ 数据控制语言(DCL):GRANT、REVOKE、COMMIT、ROLLBACK等语句。
3.数据库访问技术
1.客户机-服务器软件
服务器是整个应用系统资源的存储与管理中心,多个客户端则各自处理相应的功能,共同实现完整的应用。在客户/服务器结构中,客户端用户的请求被传送到数据库服务器,数据库服务器进行处理后,将结果返回给用户,从而减少了网络数据传输量。
用户使用应用程序时,首先启动客户端通过有关命令告知服务器进行连接以完成各种操作,而服务器则按照此请示提供相应的服务。每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。
2.PostgreSQL发展历程
PostgreSQL的发展历程可以追溯到1986年,加州大学伯克利分校开发一个名叫Postgres的关系数据库服务器。
到了1994年,向Postgres 中增加了SQL语言的解释器,命名为Postgres95,并随后将其源代码发布到互联网上供大家使用,成为一个开放源码的数据库管理系统。
到了1996年,Postgres95名称被更改为PostgreSQL,表示它支持查询语言标准,同时版本号也重新从6.0开始。自从版本6.0之后,出现了很多后续发行,在系统中也出现了很多改进。
2016年9月29日,PostgreSQL全球开发组发布PostgreSQL 9.6版本,该版本允许用户纵向扩展和横向扩展来提高数据库的查询性能,同时增加了并行查询、同步复制改进、短语搜索等功能,从而使复制、聚合、索引、排序等过程变得更加高效,使其性能和可用性得到极大提高。
2018年10月18日,PostgreSQL全球开发组发布PostgreSQL 11版本。
3.PostgreSQL的优势
⑴ 价格
⑵ 速度
⑶ 容易使用
⑷ 可移植性
⑸ 丰富的接口
⑹ 支持查询语言
⑺ 相互配合的开源软件较多
⑻ 安全性和连接性
爬取百度图片并把图片存到本地:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115import re
import requests
from urllib import error
from bs4 import BeautifulSoup
import os
num = 0
numPicture = 0
file = ''
List = []
def Find(url):
global List
print('正在检测图片总数,请稍等.....')
t = 0
i = 1
s = 0
while t < 1000:
Url = url + str(t)
try:
Result = requests.get(Url, timeout=7)
except BaseException:
t = t + 60
continue
else:
result = Result.text
pic_url = re.findall('"objURL":"(.*?)",', result, re.S) # 先利用正则表达式找到图片url
s += len(pic_url)
if len(pic_url) == 0:
break
else:
List.append(pic_url)
t = t + 60
return s
def recommend(url):
Re = []
try:
html = requests.get(url)
except error.HTTPError as e:
return
else:
html.encoding = 'utf-8'
bsObj = BeautifulSoup(html.text, 'html.parser')
div = bsObj.find('div', id='topRS')
if div is not None:
listA = div.findAll('a')
for i in listA:
if i is not None:
Re.append(i.get_text())
return Re
def dowmloadPicture(html, keyword):
global num
# t =0
pic_url = re.findall('"objURL":"(.*?)",', html, re.S) # 先利用正则表达式找到图片url
print('找到关键词:' + keyword + '的图片,即将开始下载图片...')
for each in pic_url:
print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))
try:
if each is not None:
pic = requests.get(each, timeout=7)
else:
continue
except BaseException:
print('错误,当前图片无法下载')
continue
else:
string = file + r'\\' + keyword + '_' + str(num) + '.jpg'
fp = open(string, 'wb')
fp.write(pic.content)
fp.close()
num += 1
if num >= numPicture:
return
if __name__ == '__main__': # 主函数入口
word = input("请输入搜索关键词(可以是人名,地名等): ")
# 比如百度图片上搜索:苹果
# add = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=%e8%8b%b9%e6%9e%9c&pn=120'
url = 'http://image.baidu.com/search/flip?tn=baiduimage&ie=utf-8&word=' + word + '&pn='
tot = Find(url)
Recommend = recommend(url) # 记录相关推荐
print('经过检测{}类图片共有{}张'.format(word, tot))
numPicture = int(input('请输入想要下载的图片数量: '))
file = input('请建立一个存储图片的文件夹,输入文件夹名称即可:')
y = os.path.exists(file)
if y == 1:
print('该文件已存在,请重新输入')
file = input('请建立一个存储图片的文件夹,)输入文件夹名称即可')
os.mkdir(file)
else:
os.mkdir(file)
t = 0
tmp = url
while t < numPicture:
try:
url = tmp + str(t)
result = requests.get(url, timeout=10)
print(url)
except error.HTTPError as e:
print('网络错误,请调整网络后重试')
t = t + 60
else:
dowmloadPicture(result.text, word)
t = t + 60
print('当前搜索结束,感谢使用')
print('猜你喜欢')
for re in Recommend:
print(re, end=' ')
执行结果如下,比如搜索杨树:
存到本地的效果如下图:
共勉,(๑•̀ㅂ•́)و✧加油
这是一个绕口令,要一口气说完。开始做绕口令练习的时候,中间可以换一换气,练到气息有了控制能力的时候,逐渐把换气次数减少,最后争取一口气说完,甚至多说几个枣儿。必须进行共鸣训练。 以下介绍几种简单易行的共训练方法。 方法/步骤 1, 放松喉头,用“哼哼”音唱歌。 2,学鸭叫声。挺软腭,口腔张开成一圆筒,边发gaga音,边仔细体会,共鸣运用得好的gaga音好听,共鸣运用得不好的gaga音枯燥、刺耳。 3, 学牛叫声。类似打电话的“嗯”(什么?)和“嗯”(明白了)。 4, 牙关大开合,同时发出“啊”音。 5, 模拟汽笛长鸣声。(di)既可平行发音,也可由大到小或由小到大地变化发音。 6, 做扩胸运动,同时尽量发高亢或尽量低沉的声音。 7, “气泡音”练习。闭嘴,用轻匀的气流冲击声带,使之发出细小的抖动声。 8,音阶层练习。选一句话,在本人音域范围内,先用低调说,一级一级地升高,然后又一级一级地下降,在一句高一句低,高低交替,一句话又高到低,再由低到高。 9,夸张四声练习。选择韵母因素较多的词语或成语,运用共鸣技巧做夸张四声的训练。如:清——正——廉——洁——,英——勇——顽——强——。 10, 大声呼唤练习。假设某人在离自己100米处,大声呼唤:张——师——傅——,快——回——来——!喂——,那——里——危——险——,快——离——开——! 字的对比练习。训练要求是,对比平翘舌声母,再分别组词作朗诵练习。 > 平——翘 滋——之 字——只咋——扎 总——中 > 嘴——追 增——正 尊——准 藏——张 > 词的对比练习。训练要求是:对比平翘舌声母,再分别用每个词说句话。 > 平——翘 自主——支柱栽花——摘花 木材——木柴 > 推辞——推迟 私人——诗人 司机——实际 > 组词练习。训练要求是:用平翘舌音组词,辨音记词,再用每个词说句话。 > Z——zh 在职 杂志 栽种 增长 自重 宗旨 > Zh——z 渣滓 张嘴 种族 长子 沼泽 振作 > C——ch 财产 草场 猜出 采茶 彩绸 餐车 > Ch——c 车次场次 蠢才 纯粹 差错 陈词 > Sh——s 三十 丧生 扫射 私塾 四十 四声 > S——sh 哨所 山色 深思 神速 上诉 深邃 绕口令-1 八百标兵(b、p) 八百标兵奔北坡,炮兵并排北边跑,炮兵怕把标兵碰,标兵怕碰炮兵炮。 炮兵和步兵(b、p、m)炮兵攻打八面坡,炮兵排排炮弹齐发射。步兵逼近八面坡,歼敌八千八百八十多。 绕口令-2 一平盆面(b、p) 一平盆面,烙一平盆饼,饼碰盆,盆碰饼。 巴老爷芭蕉树(b、p)巴老爷有八十八棵芭蕉树来了八十八个把式要在巴老爷八十八棵芭蕉树下住。巴老爷拔了八十八棵芭蕉树,不让八十八个把式在八十八棵芭蕉树下住,八十八个把式烧了八十八棵芭蕉树,巴老爷在八十八棵树边哭。 绕口令-8 哥挎瓜筐过宽沟(g、k) 哥挎瓜筐过宽沟,赶快过沟看怪狗,光看怪狗瓜筐扣,瓜滚筐空哥怪狗。 哥哥捉鸽(g、k、h) 哥哥过河捉个鸽,回家割鸽来请客,客人吃鸽称鸽肉,哥哥请客乐呵呵。 老爷堂上一面鼓(g、k、h)老爷堂上一面鼓,鼓上一只皮老虎,皮老虎抓破了鼓,就拿块破布往上补,只见过破布补破裤,哪见过破布补破鼓。 知自在自然自在;
悟如来想如来,
非如来如是如来。
长扁担,短扁担长扁担,短扁担,
长扁担比短扁担长半扁担;
短扁担比长扁担短半扁担。
长扁担绑在短板凳上,
长板凳不能绑在比短扁担长半扁担的长扁担上;
短板凳也不能绑在比长扁担短半扁担的短扁担上。
民兵排选标兵
民兵排选标兵,
六班的标兵、七班的标兵、八班的标兵,
评比台前比选先进,
比比谁更先进,
选拔八名全排标兵上北京。
盆和棚天上一个盆,
地下一个棚,
盆碰棚,棚碰盆,
棚倒了,盆碎了,
是棚赔盆,
还是盆赔棚?
他们要学理发。
理化不是理发,
理发不是理化。
学会理化不会理发,
学会理发也不懂理化。
量窗量床又量墙量窗量床又量墙,
跳上床量窗,
靠住墙量床,
墙比张床长,
床又比窗长,
窗长不过床,
床又长不过墙,
所以墙比床比窗长,
读不顺就去撞墙。
钉上挂条绳,
滑落绳下瓶,
打碎瓶下灯,
砸破灯下盆。
瓶打灯,灯打盆,
盆骂灯,灯骂瓶,
瓶骂绳,绳骂钉,
钉怪绳,绳怪瓶,
瓶怪灯,灯怪盆,
叮叮当当当当叮,
乒乒乓乓乓乓乒。
爹打弟,弟滚地爹打弟,弟滚地,
嫂嫂烧苕哄地弟;
姐呼鸡,鸡藏箕,
叔叔竖黍惊箕鸡。
奋发商店卖混纺奋发商店卖混纺,
有红混纺,黄混纺,粉红混纺,花混纺,
纷繁的混纺让大娘着了慌。
仿佛进了混纺的大世界,
眼也花,手也忙。
吩咐女儿快快挑混纺。
理化和理发我们要学理化,
他们要学理发。
理化不是理发,
理发不是理化。
学会理化不会理发,
学会理发也不懂理化。
从北边来了一个阿巴阿巴,背上背着一个伸缩喇叭。
南边提着比目鱼的啦的高高大大的喇嘛,要拿比目鱼的啦换北边背伸缩喇叭的阿巴阿巴的伸缩喇叭。
阿巴阿巴不愿拿伸缩喇叭换高高大大的喇嘛的比目鱼的啦。
高高大大的喇嘛非要换背伸缩喇叭阿巴阿巴的伸缩喇叭。
高高大大的喇嘛抡起比目鱼的啦抽了背伸缩喇叭阿巴阿巴一比目鱼的啦,阿巴阿巴摘下伸缩喇叭打了提比目鱼的啦的高高大大的喇嘛一伸缩喇叭。也不知是提着比目鱼的啦的高高大大的喇嘛抽了背伸缩喇叭的阿巴阿巴一比目鱼的啦,还是背伸缩喇叭的阿巴阿巴打了提比目鱼的啦的高高大大的喇嘛一伸缩喇叭。
高高大大的喇叭回家炖比目鱼的啦。
阿巴阿巴滴滴答答吹伸缩喇叭。
小鸡鸡不尿尿各有各的道天有天道地有地道
小鸡鸡不尿尿各有各的道
听说你会剑道忍道人道学过柔道抬拳道还会空手道和李小龙学过截拳道
小服呀说你爹不走正道你妈就走歪道你还不进孝道整天横行霸道还胡说八道脚踏黑白两道出门警车开道你快去你吗了个一群二白3拳4轴无炎六色七上八下五花八门三长两短千变万化五万十色万紫千红里的大比里组织一下语言深空进化一下你的长相吗的~!~气死我了小服呀你在跟我装我就一个大拳头给你打到西伯力亚叫你抱着北极熊叫爸
二哥有小锅,
大哥要换二哥的小锅,
二哥不换大哥的大锅。
班干部管班干部班干部管班干部(重复五遍)
树顶一只猴树顶一只猴,
树脚一只狗;
猴狗跋落来撞着狗,
狗吠猴哮,猴走狗也走,
不知是猴怕狗,还是狗怕猴。
2,八百标兵奔北坡,
炮兵并排北边跑,
炮兵怕把标兵碰,
标兵怕碰炮兵炮。
3,断头台倒吊短单刀,
歹徒登台偷单刀,
断头台塌盗跌倒,
对对单刀叮当掉。
八百标兵奔北坡,
炮兵并排北边跑。
炮兵怕把标兵碰,
标兵怕碰炮兵炮。
寡妇马华莎,
光汉贾家嘉。
马华莎脸上麻,
贾家嘉独眼瞎,
两人登记成了家。
贾家嘉不嫌马华莎麻,
马华莎不嫌贾家嘉瞎.
伯伯簸谷子,
簸去谷秕子。
婆婆簸谷子,
簸去秕谷子。
伯伯和婆婆,
簸谷作种子。
阿拉屋里有只白脚白鼻头白尾巴花白猫,
隔壁大伯伯啦也有只白脚白鼻头白尾巴花白猫。
阿拉个只白脚白鼻头白尾巴花白猫,
去咬杀了隔壁大伯伯啦个只白脚白鼻头白尾巴花白猫。
阿拉个只白脚白鼻头白尾巴花白猫,
去赔给了大伯伯啦个只白脚白鼻头白尾巴花白猫,
阿拉个只白脚白鼻头白尾巴花白猫白里格白养了—遭。
八百标兵奔北坡,
炮兵并排北边跑,
炮兵怕把标兵碰,
标兵怕碰炮兵炮.
哥哥弟弟坡前坐,
坡上卧着一只鹅,
坡下流着一条河,
哥哥说:宽宽的河,
弟弟说:白白的鹅.
鹅要过河,
河要渡鹅.
不知是鹅过河,
还是河渡鹅.
嘴说腿,腿说嘴,
嘴说腿爱跑腿,
腿说嘴爱卖嘴.
光动嘴不动腿,
光动腿不动嘴,
不如不长腿和嘴.
八百标兵奔北坡,
炮兵并排北边跑。
炮兵怕把标兵碰,
标兵怕碰炮兵炮。
寡妇马华莎,
光汉贾家嘉。
马华莎脸上麻,
贾家嘉独眼瞎,
两人登记成了家。
贾家嘉不嫌马华莎麻,
马华莎不嫌贾家嘉瞎.
伯伯簸谷子,
簸去谷秕子。
婆婆簸谷子,
簸去秕谷子。
伯伯和婆婆,
簸谷作种子。
哥哥挎筐过宽沟,
快过宽沟看怪狗,
光看怪狗瓜筐扣,
瓜滚筐扣哥怪狗.
八百标兵奔北坡,
炮兵并排北边跑,
炮兵怕把标兵碰,
标兵怕碰炮兵炮.
哥哥弟弟坡前坐,
坡上卧着一只鹅,
坡下流着一条河,
哥哥说:宽宽的河,
弟弟说:白白的鹅.
鹅要过河,
河要渡鹅.
不知是鹅过河,
还是河渡鹅.
嘴说腿,腿说嘴,
嘴说腿爱跑腿,
腿说嘴爱卖嘴.
光动嘴不动腿,
光动腿不动嘴,
不如不长腿和嘴.
哥哥弟弟坡前坐,
坡上卧着一只鹅,
坡下流着一条河,
哥哥说:宽宽的河,
弟弟说:白白的鹅.
鹅要过河,
河要渡鹅.
不知是鹅过河,
还是河渡鹅.
嘴说腿,腿说嘴,
嘴说腿爱跑腿,
腿说嘴爱卖嘴.
光动嘴不动腿,
光动腿不动嘴,
不如不长腿和嘴.
夹着火车上皮包.
回头一看人咬狗.
拿起狗来打石头,
又怕石头咬着手.
断头台倒吊短单刀,
歹徒登台偷单刀,
断头台塌盗跌倒,
对对单刀叮当掉.
有个小孩叫小杜,
上街打醋又买布.
买了布,打了醋,
回头看见鹰抓兔.
放下布,搁下醋,
上前去追鹰和兔,
飞了鹰,跑了兔.
洒了醋,湿了布.
八百标兵奔北坡,
炮兵并排北边跑。
炮兵怕把标兵碰,
标兵怕碰炮兵炮。
寡妇马华莎,
光汉贾家嘉。
马华莎脸上麻,
贾家嘉独眼瞎,
两人登记成了家。
贾家嘉不嫌马华莎麻,
马华莎不嫌贾家嘉瞎.
伯伯簸谷子,
簸去谷秕子。
婆婆簸谷子,
簸去秕谷子。
伯伯和婆婆,
簸谷作种子。
阿拉屋里有只白脚白鼻头白尾巴花白猫,
隔壁大伯伯啦也有只白脚白鼻头白尾巴花白猫。
阿拉个只白脚白鼻头白尾巴花白猫,
去咬杀了隔壁大伯伯啦个只白脚白鼻头白尾巴花白猫。
阿拉个只白脚白鼻头白尾巴花白猫,
去赔给了大伯伯啦个只白脚白鼻头白尾巴花白猫,
阿拉个只白脚白鼻头白尾巴花白猫白里格白养了—遭。
八百标兵奔北坡,
炮兵并排北边跑。
炮兵怕把标兵碰,
标兵怕碰炮兵炮。
哥哥挎筐过宽沟哥哥挎筐过宽沟,
快过宽沟看怪狗。
光看怪狗瓜筐扣,
瓜滚筐扣哥怪狗。
洞庭山上有根藤
洞庭山上有根藤,
藤上系着小铜铃。
风吹藤动铜铃动,
风停藤静铜铃停。
九与酒
九月九,九个酒迷喝醉酒。
九个酒杯九杯酒,九个酒迷喝九口。
喝罢九口酒,又倒九杯酒。
九个酒迷端起酒,“咕咚、咕咚”又九口。
九杯酒,酒九口,喝罢九个酒迷醉了酒。
天上一颗星
天上一颗星,地下一块冰, 屋上一只鹰,墙上一排钉。
抬头不见天上的星,乒乓乒乓踏碎地下的冰,
啊嘘啊嘘赶走了屋上的鹰,唏哩唏哩拔掉了墙上的钉。
九与酒
九月九,九个酒迷喝醉酒。
九个酒杯九杯酒,九个酒迷喝九口。
喝罢九口酒,又倒九杯酒。
九个酒迷端起酒,“咕咚、咕咚”又九口。
九杯酒,酒九口,喝罢九个酒迷醉了酒。
南边来了他大大伯子家的大搭拉尾巴耳朵狗,
北边来了他二大伯子家的二搭拉尾巴耳朵狗.
他大大伯家的大搭拉尾巴耳朵狗,咬了他二大伯家的二搭拉尾巴耳朵狗一口;
他二大伯家的二搭拉尾巴耳朵狗,也咬了他大大伯家的大搭拉尾巴耳朵狗一口.
不知是他大大伯家的大搭拉尾巴耳朵狗,先咬了他二大伯家的二搭拉尾巴耳朵狗;
还是他二大伯家的二搭拉尾巴耳朵狗,先咬了他大大伯家的大搭拉尾巴耳朵狗.
喇嘛与哑巴
打南边来了个哑巴,腰里别了个喇叭;
打北边来了个喇嘛,手里提了个獭犸.
提着獭犸的喇嘛要拿獭犸换别着喇叭的哑巴的喇叭;
别着喇叭的哑巴不愿拿喇叭换提着獭犸的喇嘛的獭犸.
不知是别着喇叭的哑巴打了提着獭犸的喇嘛一喇叭;
还是提着獭犸的喇嘛打了别着喇叭的哑巴一獭犸.
喇嘛回家炖獭犸;
哑巴嘀嘀哒哒吹喇叭
凤凰台上落凤凰。
红凤凰,蓝凤凰,
粉红凤凰黄凤凰。
凤凰落在凤凰台,
凤凰山上凤花香。
凤凰山上放凤凰凤凰山上放凤凰,
凤凰山下凤凰唱。
碰见凤凰数凤凰,
粉红凤同黄凤凰。
红凤凰绿凤凰黄凤凰红凤凰,
绿凤凰,
粉红凤凰黄凤凰。
凤凰飞,飞凤凰,
凤凰山里出凤凰。
小妞妞赶集小妞妞,去赶集,
集上有人卖鸭梨;卖的那梨真叫甜,
集上有人在卖镰;卖的那镰真叫快,
集上有人在卖菜;卖的那菜真叫鲜,
集上有人在卖烤烟;卖的那烟真叫好,
集上有人在卖红枣;卖的那枣真叫红,
集上有人卖大绳;卖的那绳真叫长,
集上有人卖香糖;卖的那糖真叫香,
集上有人卖鲜姜;卖的那姜真叫辣,
集上有人卖年画;卖的那画真好看,
集上有人卖大蒜;卖的大蒜个个大,
集上有人卖红蜡;卖的那蜡真叫粗;
集上有人卖小猪;小花猪,
猛一叫,吓了妞妞一大跳。
凤凰台上落凤凰。
红凤凰,蓝凤凰,
粉红凤凰黄凤凰。
凤凰落在凤凰台,
凤凰山上凤花香。
凤凰山上放凤凰凤凰山上放凤凰,
凤凰山下凤凰唱。
碰见凤凰数凤凰,
粉红凤同黄凤凰。
红凤凰绿凤凰黄凤凰红凤凰,
绿凤凰,
粉红凤凰黄凤凰。
凤凰飞,飞凤凰,
凤凰山里出凤凰。
小妞妞赶集小妞妞,去赶集,
集上有人卖鸭梨;卖的那梨真叫甜,
集上有人在卖镰;卖的那镰真叫快,
集上有人在卖菜;卖的那菜真叫鲜,
集上有人在卖烤烟;卖的那烟真叫好,
集上有人在卖红枣;卖的那枣真叫红,
集上有人卖大绳;卖的那绳真叫长,
集上有人卖香糖;卖的那糖真叫香,
集上有人卖鲜姜;卖的那姜真叫辣,
集上有人卖年画;卖的那画真好看,
集上有人卖大蒜;卖的大蒜个个大,
集上有人卖红蜡;卖的那蜡真叫粗;
集上有人卖小猪;小花猪,
猛一叫,吓了妞妞一大跳。
李力丽黎礼立夫妻去赶集李力丽,黎礼立,
夫妻双双去赶集,
李力丽的丈夫黎礼立,
赶集去卖竹蔑席,
黎礼立的妻子李力丽,
赶集去卖肥母鸡.
黎礼立卖了竹蔑席买只电视机,
李力丽卖了肥母鸡买件呢子衣.
红凤凰绿凤凰黄凤凰
红凤凰,
绿凤凰,
粉红凤凰黄凤凰。
凤凰飞,飞凤凰,
凤凰山里出凤凰。小妞妞赶集
小妞妞,去赶集,
集上有人卖鸭梨;卖的那梨真叫甜,
集上有人在卖镰;卖的那镰真叫快,
集上有人在卖菜;卖的那菜真叫鲜,
集上有人在卖烤烟;卖的那烟真叫好,
集上有人在卖红枣;卖的那枣真叫红,
集上有人卖大绳;卖的那绳真叫长,
集上有人卖香糖;卖的那糖真叫香,
集上有人卖鲜姜;卖的那姜真叫辣,
集上有人卖年画;卖的那画真好看,
集上有人卖大蒜;卖的大蒜个个大,
集上有人卖红蜡;卖的那蜡真叫粗;
集上有人卖小猪;小花猪,
猛一叫,吓了妞妞一大跳。李力丽黎礼立夫妻去赶集
李力丽,黎礼立,
夫妻双双去赶集,
李力丽的丈夫黎礼立,
赶集去卖竹蔑席,
黎礼立的妻子李力丽,
赶集去卖肥母鸡.
黎礼立卖了竹蔑席买只电视机,
李力丽卖了肥母鸡买件呢子衣.
小齐、小吉和小余跟着小鞠去赶集
小齐、小吉和小余,
跟着小鞠去赶集,
路上遇见一头小毛驴,
在嘁哩喀喳啃树皮。
小齐和小吉,
小余和小鞠,
一齐跑过去,
小齐和小吉把小毛驴送到村西饲养棚里面去。高个子矮个子穿高跟鞋
高个子穿的半高跟,矮个子穿的高高跟。
高个子不穿高高跟,比矮个子穿高高跟高半高跟,
矮个子穿上高高跟,比高个子穿半高跟还矮半高跟。
绣个金凤凰放金光,
绣个银凤凰放银光,
绣个粉红凤凰放粉红光,
绣个红凤凰放红光,
绣个黄凤凰放黄光,
凤凰姊,绣凤凰,
绣的凤凰会放光。
芳芳贴凤凰春天里,杏花黄,
奶奶给我剪凤凰。
我和妹妹手挽手,
一起来把歌儿唱:
一进门,粉白墙,
刚刚芳芳贴凤凰,
红凤凰,蓝凤凰,
粉红凤凰黄凤凰。
凤凰台上落凤凰。
红凤凰,蓝凤凰,
粉红凤凰黄凤凰。
凤凰落在凤凰台,
凤凰山上凤花香。
凤凰山上放凤凰凤凰山上放凤凰,
凤凰山下凤凰唱。
碰见凤凰数凤凰,
粉红凤同黄凤凰。
红凤凰绿凤凰黄凤凰红凤凰,
绿凤凰,
粉红凤凰黄凤凰。
凤凰飞,飞凤凰,
凤凰山里出凤凰。
四和十十和四十四和四十四十和十四说好四和十得靠舌头和牙齿谁说四十是细席他
的舌头没用力谁说十四是适时他的舌头4.没伸直认真学常练习十四、四十、四十四3.牛和柳
河边一棵柳,柳下一头牛,牛要去顶柳,柳条缠牛头。4.松和钟
丛岭种青松,青松挂铜钟,
风行松动铜铃鸣,风停松静钟声停。5.帆船
帆船翻,翻帆船,竖起桅杆撑开帆。
风吹帆,,帆引船,帆船顺风转海湾。6.打铁
张打铁,李打铁,打把刀,送姐姐。
姐姐留我歇,我不歇,我在张家学打铁。7.实事求是
知道就是知道,不知道就是不知道。不要知道说不知道,也不要不知道说知道。
实事求是一定要做到,这才是不折不扣的真知道。8.牛皮好绷鼓
手里起泡泡,泡里出青草,
青草好饲草,牛皮好绷鼓,
绷来鼓,急鼓鼓,十八夜里敲铜鼓。9.河里有只船
河里有只船船上挂白帆风吹帆张船向前无风帆落停下船10.兜装豆
兜里装豆,豆装满兜,兜破漏豆。倒出豆,补破兜,补好兜,又装豆,装满兜,不漏豆。11.颠倒歌
咬牛奶,喝面包,夹着火车上皮包。东西街,南北走,出门看见人咬狗。拿起狗来打砖头,又怕砖头咬我手。
哥哥挎筐过宽沟,
快过宽沟看怪狗,
光看怪狗瓜筐扣,
瓜滚筐扣哥怪狗.
八百标兵奔北坡,
炮兵并排北边跑,
炮兵怕把标兵碰,
标兵怕碰炮兵炮.
哥哥弟弟坡前坐,
坡上卧着一只鹅,
坡下流着一条河,
哥哥说:宽宽的河,
弟弟说:白白的鹅.
鹅要过河,
河要渡鹅.
不知是鹅过河,
还是河渡鹅.
打枣
出东门,
过大桥,
大桥底下一树枣。
拿着竿子去打枣,
青的多,
红的少:
一个枣、两个枣、三个枣、四个枣、五个枣、六个枣、七个枣、八个枣、九个枣、十个枣;
十个枣、九个枣、八个枣、七个枣、六个枣、五个枣、四个枣、三个枣、两个枣、一个枣。
一个半罐是半罐,两个半罐是一罐;三个半罐是一罐半,四个半罐是两罐;五个半罐是两罐半,
六个半罐是三满罐;七个、八个、九个半罐,请你算算是多少罐。
给山下三小子借了三斗三升酸枣子。过年山下三小子打下酸枣子,
四和十 四和十,十和四,十四和四十, 四十和十四。 说好四和十得靠舌头和牙齿, 谁说四十是细席, 他的舌头没用力;谁说十四是适时, 他的舌头没伸直。认真学,常练习, 十四、四十、四十四。
河里有只船,
船上挂白帆,
风吹帆张船向前,
无风帆落停下船。种南瓜
东门童家门东董家,童、董两家,同种冬瓜,童家知道董家冬瓜大,来到董家学种冬瓜。门东董家懂种冬瓜,来教东门童家种冬瓜。童家、董家都懂得种冬瓜,童、董两家的冬瓜比桶大。酒换油
一葫芦酒九两六,一葫芦油六两九。六两九的油,要换九两六的酒,九两六的酒,不换六两九的油。九个酒迷喝醉酒
九月九,九个酒迷喝醉酒。九个酒杯九杯酒,九个酒迷喝九口。喝罢九口酒,又倒九杯酒。九个酒迷端起酒,咕咚、咕咚又九口。九杯酒,酒九口,喝罢九个酒迷醉了酒。
打枣
出东门,
过大桥,
大桥底下一树枣。
拿着竿子去打枣,
青的多,
红的少:
一个枣、两个枣、三个枣、四个枣、五个枣、六个枣、七个枣、八个枣、九个枣、十个枣;
十个枣、九个枣、八个枣、七个枣、六个枣、五个枣、四个枣、三个枣、两个枣、一个枣。
一个半罐是半罐,两个半罐是一罐;三个半罐是一罐半,四个半罐是两罐;五个半罐是两罐半,
六个半罐是三满罐;七个、八个、九个半罐,请你算算是多少罐。
给山下三小子借了三斗三升酸枣子。过年山下三小子打下酸枣子,
鹅过河 哥哥弟弟坡前坐, 坡上卧着一只鹅, 坡下流着一条河, 哥哥说:宽宽的河, 弟弟说:白白的鹅。 鹅要过河, 河要渡鹅。 不知是鹅过河, 还是河渡鹅。 颠倒歌 咬牛奶,喝面包, 夹着火车上皮包。 东西街,南北走, 出门看见人咬狗。 拿起狗来打砖头, 又怕砖头咬我手。
小凤提着圆灯笼,
小龙提着方灯笼。
小凤的圆灯笼上画着龙,
小龙的方灯笼上画着凤,
小凤要拿圆龙灯笼换小龙的方凤灯笼。
大花碗里扣个大花活蛤蟆。
南边来了他大大伯子家的大搭拉尾巴耳朵狗,
北边来了他二大伯子家的二搭拉尾巴耳朵狗。
他大大伯家的大搭拉尾巴耳朵狗,咬了他二大伯家的二搭拉尾巴耳朵狗一口;
他二大伯家的二搭拉尾巴耳朵狗,也咬了他大大伯家的大搭拉尾巴耳朵狗一口。
不知是他大大伯家的大搭拉尾巴耳朵狗,先咬了他二大伯家的二搭拉尾巴耳朵狗;
还是他二大伯家的二搭拉尾巴耳朵狗,先咬了他大大伯家的大搭拉尾巴耳朵狗。
扁但是扁的,
板凳是板的。
扁担不是板凳,
板凳不是扁担。
别把扁担说成板凳,
别把板凳说成扁担。
一很长扁担,
一根短扁担,
长扁担比短扁担长半扁担,
短扁担比长扁担短半扁担。
路上走着个扛短扁担的,
对面来了个搬短板凳的。
是扛短扁担的打搬短板凳的,
还是搬短板凳的打扛短扁担的?
扁但是扁的,
板凳有板的。
扁担扁,
扁的不都是扁担,
板凳板,
有板的不都是板凳
扁担不是板凳,
板凳不是扁担,
别把扁担说成板凳
别把板凳说成扁担
扁但是扁的,
板凳是板的。
扁担不是板凳,
板凳不是扁担。
别把扁担说成板凳,
别把板凳说成扁担。
一很长扁担,
一根短扁担,
长扁担比短扁担长半扁担,
短扁担比长扁担短半扁担。
路上走着个扛短扁担的,
对面来了个搬短板凳的。
是扛短扁担的打搬短板凳的,
还是搬短板凳的打扛短扁担的?
板凳是板的。
扁担不是板凳,
板凳不是扁担。
别把扁担说成板凳,
别把板凳说成扁担。
扁担和板凳打架路上走着个扛短扁担的,
对面来了个搬短板凳的。
是扛短扁担的打搬短板凳的,
还是搬短板凳的打扛短扁担的?
扁担不是板凳扁担是扁的,
板凳有板的。
扁担扁,
扁的不都是扁担,
板凳板,
有板的不都是板凳。
扁担不是板凳,
板凳不是扁担,
别把扁担说成板凳,
别把板凳说成扁担。
板凳是板的。
扁担不是板凳,
板凳不是扁担。
别把扁担说成板凳,
别把板凳说成扁担。
扁担和板凳打架路上走着个扛短扁担的,
对面来了个搬短板凳的。
是扛短扁担的打搬短板凳的,
还是搬短板凳的打扛短扁担的?
扁担不是板凳扁担是扁的,
板凳有板的。
扁担扁,
扁的不都是扁担,
板凳板,
有板的不都是板凳。
扁担不是板凳,
板凳不是扁担,
别把扁担说成板凳,
别把板凳说成扁担。
八斤鸡和八斤狗
我家有个肥净白净八斤鸡,飞到张家后院里。
张家院有个肥净白净八斤狗,咬了我的肥净白净八斤鸡。
我拿他的肥净白净八斤狗赔了我的肥净白净八斤鸡。
一条裤子七道缝儿
一条裤子七道缝,斜缝竖缝和横缝,缝了斜缝缝竖缝,缝了竖缝缝斜缝
画凤凰
粉红墙上画凤凰 凤凰画在粉红墙 红凤凰、粉凤凰 红粉凤凰花凤凰
三山撑四水,四水绕三山,三山四水春常在,四水三山四时春(《三山撑四水》)。
司机买雌鸡,仔细看雌鸡,四只小雌鸡,叽叽好欢喜,司机笑嘻嘻(《司机买雌鸡》)。
大车拉小车,小车拉小石头,石头掉下来,砸了小脚指头(《大车拉小车》)。
夏日无日日亦热,冬日有日日亦寒,春日日出天渐暖,晒衣晒被晒褥单,秋日天高复云淡,遥看红日迫西山(《说日》)。
四声:石室诗士施史,嗜狮,誓食十狮,氏时时适市,氏视十狮,恃矢势,使是十狮逝世,氏拾是十狮尸,适石室,石室湿,氏使侍拭石室,石室拭,氏始试食十狮尸,食时,始识十狮尸实是十石狮尸,试释是事实(《施氏食狮史》)。
七巷一个漆匠,西巷一个锡匠,七巷漆匠偷了西巷锡匠的锡,西巷锡匠偷了七巷漆匠的漆。(《漆匠和锡匠》)。
哥挎瓜筐过宽沟,赶快过沟看怪狗。光看怪狗瓜筐扣,瓜滚筐空哥怪狗(《哥挎瓜筐过宽沟》)。
一堆粪,一堆灰,灰混粪,粪混灰(《一堆粪》)。
画狮子 有个好孩子,拿张图画纸, 来到石院子,学画石狮子。 一天来画一次石狮子, 十天来画十次石狮子。 次次画石狮子,天天画石狮子, 死狮子画成了活狮子。
羊 和 狼 东边来了一只小山羊, 西边来了一只大灰狼, 一起走到小桥上, 小山羊不让大灰狼, 大灰狼不让小山羊, 小山羊叫大灰狼让小山羊, 大灰狼叫小山羊让大灰狼, 羊不让狼,狼不让羊, 扑通一起掉到河中央。
鸟 和 猫 树上一只鸟, 地上一只猫。 地上的猫想咬树上的鸟, 树上的鸟想啄猫的毛。 黄狗咬我手 清早上街走,走到周家大门口, 门里跳出一只大黄狗, 朝我哇啦哇啦吼。 我拾起石头打黄狗, 黄狗跳上来就咬我的手。 也不知我手里的石头 打没打着周家的大黄狗, 周家的大黄狗咬没咬着我的手?
小 花 猫 小花猫爱画画,先画一朵腊梅花, 又画一个小喇叭,带着腊梅花, 吹着小喇叭,回家去见妈妈, 妈妈见了笑哈哈。
毛毛和猫猫 毛毛有一顶红帽,猫猫有一身灰毛。 毛毛要猫猫的灰毛, 猫猫要毛毛的红帽。 毛毛把红帽交给猫猫, 猫猫给毛毛几根灰毛。
小鱼大雁 小鱼入鱼网鱼网捕鱼鱼难逃, 大雁过雁塔雁塔留雁雁不留。
捉 兔 一位爷爷他姓顾,上街打醋又买布。 买了布,打了醋,回头看见鹰抓兔。 放下布,搁下醋,上前去追鹰和兔, 飞了鹰,跑了兔。打翻醋,醋湿布。
老鼠嗅着油豆香 油一缸,豆一筐, 老鼠嗅着油豆香。 爬上缸,跳进筐, 偷油偷豆两头忙。 又高兴,又慌张, 脚一滑,身一晃, “扑通”一声跌进缸。
蚕和蝉 爬来爬去是蚕, 飞来飞去是蝉。 蚕常在桑叶里藏, 蝉藏在树林里唱。
八公庙里的八个和尚拿八根金箍棒打八个八哥儿,
不许八个八哥儿再到八公庙里的八棵白果树上做八个八歌儿窝。 虎和鼓 墙上挂面鼓,
鼓上画老虎,
老虎抓破鼓,
拿块布来补。
不知是布补鼓,
还是布补虎? 于琳琳爱捏泥 于琳琳爱捏泥,
揉揉泥,团团泥,
揉来揉去不起急。
捏了一只小狐狸,
又捏七只小小鸡。
小狐狸、小小鸡,
全都送给小弟弟。
钉钉棚棚上有钉,
棚钉钉钉钉钉棚。
帆船翻,翻帆船,竖起桅杆撑开帆。风吹帆,,帆引船,帆船顺风转海湾。 黄碗合活鸭
黄碗合活鸭。(念五遍)红鸡和灰鸡红鸡公尾巴灰,灰鸡公尾巴红。
宝宝掰,宝宝抱。
宝宝掰包谷包谷掉,
宝宝抱包谷宝宝笑。 瓜卖花 婆婆卖瓜又卖花,
一过卖来一边夸,
夸瓜大,夸花美,
人们买瓜又买花,
乐得婆婆笑哈哈。 喇嘛提蛤蟆、哑巴别着喇叭 打南边儿来了个喇嘛,
手里提着个蛤蟆,
打北边儿来了个哑巴,
腰里别着喇叭。
手里提蛤蟆的喇嘛,
要拿蛤蟆换哑巴腰里的喇叭;
腰里别喇叭的哑巴,
不拿喇叭换喇嘛手里的蛤蟆。
提蛤蟆的喇嘛,
打了哑巴一蛤蟆;
别喇叭的哑巴,
打了喇嘛一喇叭。
峰下枫。
峰上风吹蜂会飞,峰下枫,
峰下枫挡峰上风。破瓦和骡马 楼上一块破瓦,
楼下一匹骡马,
破瓦落下来打了骡马,
骡马跳起来踩了破瓦。老伯 郭老伯、骆第伯、毕老伯、柏老伯,
郭骆毕柏四老伯,约着城北买菱角,
买菱角阁上剥,菱角壳戳了四老伯了脚。
一个驼子,拉着车子;
一个瞎子,抱着孩子。
跛子的驴子,撞着驼子的车子;
驼子的车子,碰倒瞎子的孩子;
瞎子要打驼子,驼子要打跛子。 刘小牛去打油 刘小牛去打油,
买了油,往回走;
油瓶满,往外流,
多给了半斤油,
急坏了刘小牛。
多的油,不能留,
回到商店大退油;
叔叔摸摸小牛头,
阿姨拉拉小牛手,
齐声夸资刘小牛。 贾家养虾 贾家有女初出嫁,嫁到夏家学养虾,
喂养的对虾个头儿大,卖到市场直加价。
贾家爹爹会养鸭,鸭子虽肥伤庄稼。
邻里吵架不融洽,贾家也学养对虾。
小虾卡住了鸭子牙,大鸭咬住了虾的夹。
夏家公公劝,贾家爹爹压,大鸭不怕吓,
小虾装得嗲,夏家贾家没办法。
小宝宝年纪小。
老爷爷要看报,
小宝宝要吃糕。
老爷爷给宝宝拿糕,
小宝宝给爷爷拿报。
老爷爷看报眯眯笑,
小宝宝吃糕味道好。 红凤凰粉凤凰 红凤凰粉凤凰,
红粉凤凰粉红凤凰。
红凤凰粉凤凰,
红粉凤凰粉红凤凰!
油煎豆腐骨头多,
太湖当中挑野菜,
大山顶上摸田螺,
摸个田螺笆斗大,
摆了摇篮里骗外婆。 吃核桃 我敲桃壳你剥肉,
吃掉桃肉甩掉壳。
桃壳甩得门角落,
门角落头有桃壳。
天上看,满天星
天上看,满天星;
地下看,有个坑;
坑里看,有盘冰。
坑外长着—老松,松上落着一只鹰,
松下坐着一老僧,僧前放着—部经,
经前点着一盏灯,墙上钉着一根钉,
钉上挂着一张弓。说刮风,就刮风,
刮得男女老少难把眼睛睁。
刮散了天上的星,刮平了地的坑,
刮化了坑里的冰,刮倒了坑外的松,
刮飞了松上的鹰,刮走了松下的僧,
刮乱了僧前的经,刮灭了经前的灯,
刮掉了墙上的钉,刮翻了钉上的弓。
买来一桶油,跑来一头牛,
踢翻桶里油,牛角都是油。
天上看,满天星;地下看,有个坑;坑里看,有盘冰。坑外长着—老松,松上落着一只鹰,松下坐着一老僧
,僧前放着—部经,经前点着一盏灯,墙上钉着一根钉,钉上挂着一张弓。说刮风,就刮风,刮得男女老少
难把眼睛睁。刮散了天上的星,刮平了地的坑,刮化了坑里的冰,刮倒了坑外的松,刮飞了松上的鹰,刮走
了松下的僧,刮乱了僧前的经,刮灭了经前的灯,刮掉了墙上的钉,刮翻了钉上的弓。这是一段星散、坑平
、冰化、松倒、鹰飞、僧走、经乱、灯火、钉掉、弓翻的。
望月空满天星
望月空,满天星,光闪闪,亮晶晶,
好象那,小银灯,仔细看,看分明,
大大小小,密密麻麻,闪闪烁烁,数也数不清。
砸缸小光和小刚,抬着水桶上岗。
上山岗,歇歇凉,拿起竹竿玩打仗。
乒乒乒,乓乓乓,打来打去砸了缸。
小光怪小刚,小刚怪小光,小光小刚都怪丿竿和水缸。
隔着窗子撕字纸,一撕横字纸,
再撕竖字 纸,撕了四十四张湿字纸。
小猪扛锄头,吭哧吭哧走。
小鸟唱枝头,小猪扭头瞅,
锄头撞石头,石头砸猪头。
小猪怨锄头,锄头怨猪头。
老唐端蛋汤,踏凳登宝塔,
只因凳太滑,汤洒汤烫塔。
卖蒜的算卦,算卦的买蒜。
算卦的不买卖蒜的蒜,
卖蒜的不算算卦的卦。关于满天星的绕口令
抬头看,满天星,
低头看,一道坑。
坑里看,栽的葱,
葱上看,冻的冰。
屋里看,点着灯,
墙上看,钉的钉。
钉上看,挂的弓,
弓上看,卧的鹰。
寒冷天,刮大风,
刮散了,满天星。
刮平了,地下坑,
刮倒了,坑里葱。
刮消了,葱上冰,
刮灭了,屋里灯。
刮断了,墙上钉,
刮掉了,钉上弓;
刮飞了,弓上鹰。
这才是:星散、坑平葱倒
冰消、灯灭、钉断、弓掉、鹰飞。
得棒呛一场空。毛毛的红帽、猫猫的灰毛
毛毛有一顶红帽,
猫猫有一身灰毛。
毛毛要猫猫的灰毛,
猫猫要毛毛的红帽。
毛毛把红帽交给猫猫,
猫猫抽了几根灰毛送给毛毛。毛毛穿袍袍、苗苗戴帽帽一块追猫猫
毛毛穿袍袍,
苗苗戴帽帽。
毛毛和苗苗,
一块追猫猫。
猫猫喵喵叫,
急得蹦又跳。
猫猫抓破毛毛花袍袍,
猫猫抓破苗苗花帽帽。
苗苗给毛毛补袍袍,
毛毛给苗苗补帽帽。
树上的松鼠--蹿上跳下
树上的松鼠--蹿上跳下演员制服
男演员穿蓝制服,
女演员穿棉制服,
蓝制服是棉制服,
棉制服是蓝制服。
男演员穿蓝棉制服,
女演员穿棉蓝制服。
天上看,满天星
天上看,满天星;
地下看,有个坑;
坑里看,有盘冰。
坑外长着—老松,松上落着一只鹰,
松下坐着一老僧,僧前放着—部经,
经前点着一盏灯,墙上钉着一根钉,
钉上挂着一张弓。说刮风,就刮风,
刮得男女老少难把眼睛睁。
刮散了天上的星,刮平了地的坑,
刮化了坑里的冰,刮倒了坑外的松,
刮飞了松上的鹰,刮走了松下的僧,
刮乱了僧前的经,刮灭了经前的灯,
刮掉了墙上的钉,刮翻了钉上的弓。瘸子和矬子
小山屋
南面来了个瘸子,腰里别着个橛子,
北边来了个矬子,肩上挑着担茄子。
别橛子的瘸子要用橛子换挑茄子的矬子的茄子,
挑茄子的矬子不给别橛子的瘸子茄子。
别橛子的瘸子抽出腰里的橛子打了挑茄子的矬子一橛子,
挑茄子的矬子拿起茄子打了别橛子的瘸子一茄子。
好象那,小银灯,仔细看,看分明,
大大小小,密密麻麻,闪闪烁烁,
数也数不清。
补桶桐木桶,桶有洞,
补洞用桐不用铜。
用铜补洞补不住,
用桐补桶桶无洞。
聋童朦胧彩霓虹,
玲珑小聋童。
聋童采柠檬,
聋童不懵懂。
男演员穿蓝制服, 女演员穿棉制服, 蓝制服是棉制服, 棉制服是蓝制服。 男演员穿蓝棉制服, 女演员穿棉蓝制服。 【天上看,满天星】
天上看,满天星; 地下看,有个坑; 坑里看,有盘冰。 坑外长着—老松,松上落着一只鹰, 松下坐着一老僧,僧前放着—部经, 经前点着一盏灯,墙上钉着一根钉, 钉上挂着一张弓。说刮风,就刮风, 刮得男女老少难把眼睛睁。 刮散了天上的星,刮平了地的坑, 刮化了坑里的冰,刮倒了坑外的松, 刮飞了松上的鹰,刮走了松下的僧, 刮乱了僧前的经,刮灭了经前的灯, 刮掉了墙上的钉,刮翻了钉上的弓。
天上看,满天星; 地下看,有个坑; 坑里看,有盘冰。 坑外长着—老松,松上落着一只鹰, 松下坐着一老僧,僧前放着—部经, 经前点着一盏灯,墙上钉着一根钉, 钉上挂着一张弓。说刮风,就刮风, 刮得男女老少难把眼睛睁。 刮散了天上的星,刮平了地的坑, 刮化了坑里的冰,刮倒了坑外的松, 刮飞了松上的鹰,刮走了松下的僧, 刮乱了僧前的经,刮灭了经前的灯, 刮掉了墙上的钉,刮翻了钉上的弓。 【瘸子和矬子】
小山屋 南面来了个瘸子,腰里别着个橛子, 北边来了个矬子,肩上挑着担茄子。 别橛子的瘸子要用橛子换挑茄子的矬子的茄子, 挑茄子的矬子不给别橛子的瘸子茄子。 别橛子的瘸子抽出腰里的橛子打了挑茄子的矬子一橛子, 挑茄子的矬子拿起茄子打了别橛子的瘸子一茄子。
妈妈骂马妈妈种麻,我去放马,马吃了麻,妈妈骂马。
六叔和六舅好六叔和好六舅,借给六斗六升绿绿豆。打罢秋,接住豆,再还六叔六舅六斗六升绿绿豆。
小秋和小牛 小妞妞,叫小秋,梳着两个小抓鬏,小胖胖,叫小牛,穿着一个小兜兜。小秋帮着小牛记扣扣,小牛帮小秋剥豆豆,小秋、小牛手拉手,一块儿玩,一块儿走。
送 花华华有两朵红花,红红有两朵黄花,华华想要黄花,红红想要红花,华华送给红红一朵红花,红红送给华华一朵黄花。
好 孩 子张家有个小英子,王家有个小柱子。张家的小英子,自己穿衣洗袜子,天天扫地擦桌子,王家的小柱子,捡到一只皮夹子,还给后院大婶子。小英子,小柱子,他们都是好孩子。
任命、人名任命是任命,人名是人名,任命人名不能错,错了人名错任命。
四 老 伯郭老伯、骆老伯,毕老伯、柏老伯,郭骆毕柏四老伯,约着城北买菱角,买得菱角阁上剥,菱角壳戳了四老伯的脚。
分 果 果多多和哥哥,坐下分果果。哥哥让多多,多多让哥哥。都说要小个,外婆乐呵呵。
南南有个篮南南有个篮篮,篮篮装着盘盘,盘盘放着碗碗,碗碗盛着饭饭。南南翻了篮篮,篮篮扣了盘盘,盘盘打了碗碗,碗碗撒了饭饭。
瘸 子北边来了一个瘸子,背着一捆橛子。南边来了一个瘸子,背着一筐茄子。背橛子的瘸子打了背茄子的瘸子一橛子。背茄子的瘸子打了背橛子的瘸子一茄子。
小华和胖娃小华和胖娃,两人种花又种瓜,小华会种花不会种瓜,胖娃会种瓜不会种花,小华教胖娃种花,胖娃教小华种瓜。
白家伯伯北贫坡上白家有个伯伯,家里养着一百八十八只白鹅,门口种着一百八十八棵白果,树上住着一百八十八只八哥。八哥在白果树上吃白果,白鹅气得直叫:我饿!我饿!
白鸽尖尖红嘴壳,白鹅曲项向天歌。
白鸽剪开云朵朵,白鹅拨开浪波波。
鸽乐呵呵,鹅活泼波,白鹅白鸽碧波蓝天真快乐。小鱼大雁
小与入鱼网鱼网捕鱼鱼难逃,大雁过雁塔雁塔留雁雁不留。雾
早晨下大雾,山里看不见路,急坏了小猪、小兔和小鹿。
小兔领小猪,小猪拉小鹿,拉着藤,扶着树,一步一步走山路。
秋风婆婆来帮助,呼——呼——呼—— 一下吹散满天雾。猫吃桃河边有座窑,窑上有个槽,槽里放件袍,袍包个桃。
对岸有只猫,想吃窑上槽里袍包桃,可惜岸上没有桥。
过不了河,上不了窑,够不找槽,咬不住袍,吃不了桃。白庙、白猫、白帽山顶有座白庙,白庙里有只白猫。
白庙外有顶白帽,白猫看见了白帽,
叨着白帽跑进了白庙。牛和油买来一桶油,跑来一头牛,踢翻桶里油,牛角都是油。鼠吃豆和油鼠咬豆囤囤漏豆,鼠啃油篓篓漏油篓油,豆囤漏豆鼠啃豆,油篓漏油鼠吸油。
护 树北风吹摇路边树,小陆上前把树护。一个木竿路旁竖,一根绳子拴捆住。树有木竿做支柱,木竿支树树稳固。
石榴树上结辣椒颠倒话,话颠倒,石榴树上结辣椒。东西大路南北走,碰见兔子去咬狗。拿住狗,打砖头,砖头咬住我的手。
黑豆放黑斗黑豆放在黑斗里,黑斗里边放黑豆,黑豆放黑斗,黑斗放黑豆,不知黑豆放黑斗,还是黑斗放黑豆。
收 葵 花葵花、蓖麻胖娃小筐手中拿,来到园中收葵花;小华小篮身上挎,一同进园收蓖麻。胖娃种的葵花花盘大,小华种的蓖麻密麻麻。小华去帮胖娃摘葵花,胖娃去帮小华收蓖麻。小华和胖娃,收了葵花、蓖麻献国家。
荷花和蛤蟆一朵粉红大荷花,趴着一只活蛤蟆,八朵粉红大荷花,趴着八只活蛤蟆。
花 和 瓜瓜藤开花像喇叭,娃娃爱花不去掐。瓜藤开花瓜花结花,没花就没瓜。吃瓜要爱花,娃娃爱花也爱瓜。
白果树我从伯伯门前过,看见伯爹伯妈门前种着白果树,白果树上站着百十百个白斑鸠,我就拣了百十百块白石头,打那百十百个白斑鸠。
高高山上一条藤高高山上一条藤,藤条头上挂铜铃。风吹藤动铜铃动,风停藤停铜铃停。
一 捆 葱东边来个小朋友叫小松,手里拿着一捆葱。西边来个小朋友叫小丛,手里拿着小闹钟。小松手里葱捆得松,掉在地上一些葱。小丛忙放闹钟去拾葱,帮助小松捆紧葱。小松夸小丛像雷锋,小丛说小松爱劳动。
兜 装 豆兜里装豆,豆装满兜,兜破漏豆。倒出豆,补破兜,补好兜,又装豆,装满兜,不漏豆。
洪家地下有个棚,冯家房上有个瓶。 冯洪两家猫打架,弄倒了洪家的棚,打碎了冯家的瓶。 冯家要赔洪家的棚,洪家要赔冯家的瓶。 不知冯家要赔洪家的棚,还是洪家要赔冯家的瓶。碰碰车
碰碰车,车碰碰,坐着朋朋和平平。 平平开车碰朋朋,朋朋开车碰平平,不知是平平碰朋朋,还是朋朋碰平平。 东边一座楼
东边一座楼,楼上两人打拳头。 拳头打,打拳头。来了一个人,拉了一头牛,将牛拴在楼脚下,看他两人打拳头。 拳头打,打拳头。又来了一个人,领了一只猴,将猴放在牛脚下,看他两人打拳头。 拳头打,打拳头。又来了一个人,挑了一担油,将油放在猴脚下,看他两人打拳头。 拳头打,打拳头。又来了一个人,挑了一担绸,将绸放在油脚下,看他两人打拳头。 拳头打,打拳头,两人打垮车边楼。 垮子楼,压倒牛,牛一蹲,蹲倒猴,猴一抓,抓倒油,油一泼,泼上绸。 绸问油,卖油买绸来赔绸;油问猴,卖猴买油来赔油; 猴问牛,卖牛买猴来赔猴;牛问楼,卖楼买牛来赔牛。 只问绸扯油来油扯猴,猴扯牛来牛扯楼。猴子吃掉小桃子
树上有只小桃子,树下有只小猴子。风吹桃树哗哗响,树上掉下小桃子。 桃子打着小猴子,猴子吃掉小桃子。
嘴说腿,腿说嘴,嘴说腿爱跑腿,腿说嘴爱卖嘴。 光动嘴不动腿,光动腿不动嘴,不如不长腿和嘴。铜勺铁勺舀油
铜勺舀热油,铁勺舀凉油。铜勺舀了热油舀凉油,铁勺舀了凉油舀热油。 一勺热油一勺凉油,热油凉油都是由。 狗
南边来了他大大伯子家的大搭拉尾巴耳朵狗, 北边来了他二大伯子家的二搭拉尾巴耳朵狗。 他大大伯家的大搭拉尾巴耳朵狗,咬了他二大伯家的二搭拉尾巴耳朵狗一口; 他二大伯家的二搭拉尾巴耳朵狗,也咬了他大大伯家的大搭拉尾巴耳朵狗一口。 不知是他大大伯家的大搭拉尾巴耳朵狗,先咬了他二大伯家的二搭拉尾巴耳朵狗; 还是他二大伯家的二搭拉尾巴耳朵狗,先咬了他大大伯家的大搭拉尾巴耳朵狗。水连天
天连水,水连天,水天一色望无边。兰兰的天似绿水,绿绿的水如蓝天。 到底是天连水,还是水连天?
颠 倒 歌太阳从西往东落,听我唱个颠倒歌。天上打雷没有响,地上石头滚上坡。江里骆驼会下蛋,山上鲤鱼搭成窝。腊月炎热直流汗,六月寒冷打哆嗦。
妹照镜子头梳手,门外口袋把驴驮。青 龙 洞 青龙洞中龙做梦,青龙做梦出龙洞,做了千年万载梦,龙洞困龙在深洞。自从来了新愚公,愚公捅开青龙洞,青龙洞中涌出龙,龙去农田做农工。
造 房 子捡颗小石子,在地上画个方格子,画好了格子造房子,画个大方格子造个大房子,
画个小方格子造个小房子,楼上的房子分给鸽子,楼下的房子分给小兔子。搭 房 子红红的好朋友蓝蓝会搭红房子,蓝蓝的好朋友红红会搭蓝房子。会搭红房子的蓝蓝,愿帮会搭蓝房子的红红搭红房子,会搭蓝房子的红红,愿帮会搭红房子的蓝蓝搭蓝房子。
青 龙 洞青龙洞中龙做梦,青龙做梦出龙洞,做了千年万载梦,龙洞困龙在深洞。自从来了新愚公,愚公捅开青龙洞,青龙洞中涌出龙,龙去农田做农工。 皮鞋、蒲鞋一只皮鞋,一只蒲鞋,皮鞋补蒲鞋,蒲鞋补皮鞋,皮鞋、蒲鞋,蒲鞋、皮鞋……
盆 和 瓶桌上放个盆,盆里有个瓶,砰砰啪啪,啪啪砰砰,不知是瓶碰盆,还是盆碰瓶。河里有只船河里有只船,船上挂白帆,风吹帆张船向前,无风帆落停下船。
枪 和 糠墙上一个窗,窗上一支枪,窗下一箩糠。枪落进了糠,糠埋住了枪。窗要糠让枪,糠要枪上墙,墙要枪上窗。互相不退让,糠赶不走枪,枪也上不了窗和墙。比 锤炉东有个锤快锤,炉西有个锤锤快,两人炉前来比赛,不知是锤快锤比锤锤快锤得快?还是锤锤快比锤快锤锤得快?
簸箕簸玉米皮。
会簸簸箕能簸出玉米皮,
小波不会簸簸箕,
簸不出玉米皮。
后簸谷秕子。
会簸秕谷子,
就簸谷秕子。
不会簸秕谷子,
就不簸谷秕子。
簸完秕谷子,
再簸谷秕子。
簸箕簸灰簸箕簸灰,
风小灰回,
风大灰飞。
簸箕簸灰,
风大灰飞,
风小灰回。
我走白家门前过,
白家门前一棵白果树,
树上结了白果果,
白果树上歇了只白八哥。
高高山上一条藤,
藤条头上挂铜铃,
风吹藤动铜铃动,
风停藤停铜铃停。
拔萝卜
出八十八二十八,
八个小孩儿把萝卜拔,
你也拔,我也拔,
看谁拔得多,
看谁拔得大。
你拔得不多个儿不小,
我拔得不少个儿不大。
一个萝卜一个坑儿,
算算多少用车拉,
一个加俩,俩加仨,
七十二个加十八,
拿个算盘打一打,
一百差俩九十八。
吃菱角,剥菱壳,
菱角丢在北壁角。
不吃菱角不剥壳,
菱角不丢北壁角。采蘑菇
黑兔和白兔,
上山采蘑菇,
小猴和小鹿,
一齐来帮助,
猴和兔,兔和鹿,
高高兴兴采蘑菇。
桐子落,童子乐;
丫头啃鸭头,
鸭头咸,丫头嫌。朱叔锄竹笋朱家一株竹,
竹笋初长出,
朱叔处处锄,
锄出笋来煮,
锄完不再出,
朱叔没笋煮,
竹株又干枯。
八个八哥飞上树,八棱八角树上住。
树下孩子直发悉,手拿弹弓射大树。
打得八哥离开树,八棱八角掉下树。
吃葡萄青葡萄,紫葡萄,
青葡萄没籽葡萄紫,
吃葡萄不吐葡萄皮,
不吃葡萄倒吐葡萄皮。
棉花像雪花,雪花像棉花。
棉花不是雪花,雪花不是棉花,
冷冰冰的是雪花,暖烘烘的是棉花。
瓜卖花婆婆卖瓜又卖花,
一过卖来一边夸,
夸瓜大,夸花美,
人们买瓜又买花,
乐得婆婆笑哈哈。
低头捡豆,
豆捡在手,
豆装豆篓。瓜爸爸种瓜瓜儿大,
妈妈摘瓜摘大瓜,
奶奶切瓜分大家,
大家吃瓜笑哈哈。有豆有扣小篓篓,有豆豆还有扣扣,
娃娃想拿豆豆却拿起扣扣,
又想拿起扣扣却又拿起豆豆,
豆豆扣扣,都让娃娃放回篓篓。
葱和松
东院想栽葱,
西院想栽松。
是东院栽葱,
还是西院栽松。
半边莲,莲半边,
半边莲长在山涧边。
半边天路过山涧边,发现这片半边莲。
半边天拿来一把镰,割了半筐半边莲。
半筐半边莲,送给边防连。
瓜棚挂瓜
瓜棚挂瓜,瓜挂瓜棚。
风刮瓜棚瓜棚动,
棚动瓜动瓜碰棚。
水上漂着一只瓢,
水上漂着一只瓢,
瓢上落着一只鸟,
鸟看瓢,瓢瞪鸟,
鸟不认识瓢,瓢也不认识鸟。
花生生花
新生农业社,生产落花生。
花生生花生,花生花生生。
生了数百升,升升盛花生。
声声话花生,人人夸花生。
一捆葱
东边来个小朋友叫小松,
手里拿着一捆葱。
西边来个小朋友叫小丛,
手里拿着小闹钟。
小松手里葱捆得松,
掉在地上一些葱。
小丛忙放闹钟去拾葱,
帮助小松捆紧葱。
小松夸小丛像雷锋,
小丛说小松爱劳动。
代码如下:
1 | import requests |
执行结果如下:
存入文本中的数据如下:
网站如下:http://www.nows.fun/
1 |
|
代码如下:
1 | import requests |
执行结果如下图:


加了去重,钉钉报警
db.py1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53# -*- encoding: utf-8 -*-
import hashlib
import time
from sqlalchemy import create_engine
from sqlalchemy import Column, VARCHAR, Integer, TIMESTAMP, CHAR
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+pymysql://root:123456@localhost/test?charset=utf8')
DBSession = sessionmaker(bind=engine)
session = DBSession()
Base = declarative_base()
class YoududuanziItem(Base):
"""段子信息"""
__tablename__ = 'duanzi_for_fun'
desc = '段子信息'
id = Column(Integer, primary_key=True, autoincrement=True)
duplicate_hash = Column(CHAR(40), index=True, unique=True, doc={'zh': "url hash"})
crawl_time = Column(TIMESTAMP, doc={'zh': '当前时间'})
centence = Column(VARCHAR(200), index=True, doc={'zh': '段子'})
@classmethod
def creat_table(cls):
"""创建数据表"""
cls.__table__.create(bind=engine, checkfirst=True)
def insert(self, centence):
url_sha = self.get_contern_url_hash(centence)
crawled_time = time.strftime('%Y-%m-%d %H:%M:%S')
try:
is_exist = session.query(YoududuanziItem).filter(YoududuanziItem.duplicate_hash == url_sha).all()
if not is_exist:
item = YoududuanziItem(duplicate_hash=url_sha, crawl_time=crawled_time, centence=centence)
session.add(item)
session.commit()
return True
else:
return False
except BaseException as e:
session.rollback()
session.close()
raise BaseException(f"数据插入失败: \n{url_sha} \n{centence} \n{e}")
def get_contern_url_hash(self, content_url):
hash = hashlib.sha1()
hash.update(str(content_url).encode('utf-8'))
url_sha = hash.hexdigest()
return url_sha
爬虫代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81# -*- encoding: utf-8 -*-
import time
import json
import requests
import logging
from lxml import etree
from fake_useragent import UserAgent
from my_test.db import session, YoududuanziItem
class YoududuanziSpider(object):
def __init__(self):
self.headers = {
'User-Agent': self.get_random_ua()
}
self.url = 'http://www.nows.fun/'
# 钉钉报警模板字段,注意: 必须使用raw string, 不能使用多行字符串, 钉钉只处理没有转义的字符, 包含转义字符会导致解析失败
self.failure_template = ('数据爬取信息:\n\n'
'> spider_name: {spider_name}\n\n'
'> table_name: {table_name}\n\n'
'> data_num: {data_num}\n\n'
'> last_data: {last_data}\n\n'
'> log_url: {log_url}\n\n')
self.dingding_headers = {
"Content-Type": "application/json;charset=utf-8",
}
def get_random_ua(self): # 随机UA
ua = UserAgent()
return ua.random
def get_content(self):
response = requests.get(url=self.url, headers=self.headers, timeout=10)
selector = etree.HTML(response.text)
centence = selector.xpath('//span[@id="sentence"]/text()')[0]
return centence
def send_dingtalk(self, spider_name, table_name, data_num, last_data, log_url):
try:
content = self.failure_template.format(
spider_name=spider_name,
table_name=table_name,
data_num=data_num,
last_data=last_data,
log_url=log_url
)
msg = {
"msgtype": "markdown",
"markdown": {
"title": '爬取的段子信息',
"text": '淘数爬虫:' + content
}
}
ding_url = 'https://oapi.dingtalk.com/robot/send?access_token=c1984aefbaff584bceb37b855b8380d7c6c78545fb749d068fc378df627fa786'
resp = requests.post(url=ding_url, headers=self.dingding_headers, data=json.dumps(msg), timeout=30)
json_data = json.loads(resp.text)
if resp.status_code == 200 and json_data['errcode'] == 0:
pass
else:
logging.error('钉钉报警发送失败{}'.format(json_data['errmsg']))
except Exception as e:
logging.error("send dingtalk failed, exception: ", e)
def run(self):
for i in range(100000):
job_info = self.get_content()
table.insert(job_info)
time.sleep(2)
if i % 1000 == 0:
logging.info(f'爬取进度:self.num={i}条数据!!!')
self.send_dingtalk(spider_name='youduduanzi', table_name='duanzi_for_fun', data_num=5, last_data=job_info, log_url=self.url)
if __name__ == '__main__':
duanzi = YoududuanziSpider()
table = YoududuanziItem()
table.creat_table()
duanzi.run()
共勉,(๑•̀ㅂ•́)و✧加油
设计模式:代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
GOF介绍:在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书,该书首次提到了软件开发中设计模式的概念。
四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。
总的来说设计模式分为3大类:
• 创建型模式(Creational Patterns):(都是用来帮助我们创建对象的)这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。主要包括:
单例模式(Singleton Pattern):保证一个类仅有一个对象,并提供一个访问它的全局访问点。(Ensure a class only has one instance,and provide a globe point of access to it.)
详细单例模式介绍可点此链接:单例模式详解(附常见的7种单例模式源码)
用Python实现单例模式:用Python 实现单例模式 (Python经典编程案例)
工厂模式(Factory Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化,FactoryMethod使一个类的实例化延迟到其子类。(Define an interface for creating anobject, but let subclasses decide which class to instantiate. Factory methodlets a class defer instantiation to subclasses.)
详细工厂模式介绍可点此链接:工厂模式详解 (附java语言源码)
Python实现工厂模式:用python实现工厂设计模式(Python经典编程案例)
抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。(Provide an interface for creating families of related or dependent object without specifying their concrete classes.)
详细抽象工厂模式介绍可点此链接:抽象工厂模式详解 (附java语言源码)
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。(Separate the construction of a complex object from its representation so that the same construction process can create different representations.)
详细建造者模式介绍可点此链接:建造者模式详解 (附java语言源码)
原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。(Specify the kinds of objects to create using a prototypical instance, and create new objects by copying the prototype.)
详细原型模式介绍可点此链接:原型模式详解 (附java语言源码)
•结构型模式(Structural Patterns):这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。主要包括:
适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。(Convert the interface of a class into another interface clients except. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.)
详细适配器模式介绍可点此链接:适配器模式详解 (附java语言源码)
桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使他们都可以独立地变化。(Decouple an abstraction from its implementation so that the two can vary independently.)
详细桥接模式介绍可点此链接:桥接模式详解 (附java语言源码)
装饰模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类的方式更为灵活。(Attach additional responsibilities to an object dynamically. Decorators provides a flexible alternative to subclasses for extending functionality.)
详细装饰模式介绍可点此链接:装饰模式详解 (附java语言源码)
组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构。Composite 使得客户对单个对象和复合对象的使用具有一致性。(Compose object into tree structures torepresent part-whole hierarchy. Composite lets clients treat individual objectsand compositions of objects uniformly.)
详细组合模式介绍可点此链接:组合模式详解 (附java语言源码)
外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的接口。Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。(Provide a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.)
详细外观模式介绍可点此链接:外观模式详解 (附java语言源码)
享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。(Use sharing to support large numbers offine-grained objects efficiently.)
详细享元模式介绍可点此链接:享元模式详解 (附java语言源码)
代理模式(Proxy Pattern):为其他对象提供一个代理以控制对这个对象的访问。(Provide a surrogate or placeholder foranther object to control access to it.)
详细代理模式介绍可点此链接:代理模式详解 (附java语言源码)
• 行为型模式(Behavioral Patterns):这些设计模式特别关注对象之间的通信。主要包括:
模版方法模式(Template Pattern):定义一个操作中的算法的骨架,而将一些步骤延迟到子类。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。(Define the skeleton of an algorithm inan operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing thealgorithm’s structure.)
详细模版方法模式介绍可点此链接:模板方法模式详解 (附java语言源码)
命令模式(Command Pattern):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可取消的操作。(Encapsulate a request as an object,thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.)
详细命令模式介绍可点此链接:命令模式详解 (附java语言源码)
迭代器模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。(Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.)
详细迭代器模式介绍可点此链接:迭代器模式详解 (附java语言源码)
观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。(Define a one-to-many dependency between objects so that when one object changes state all its dependents are notified and updated automatically.)
详细观察者模式介绍可点此链接:观察者模式详解 (附java语言源码)
中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。(Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly and it lets you vary their interaction independently.)
详细中介者模式介绍可点此链接:中介者模式详解 (附java语言源码)
备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保持该状态,这样以后就可以将该对象恢复到保存的状态。(Without violating encapsulates, captureand externalize an object’s internal state so that the object can be restored to this state later.)
详细备忘录模式介绍可点此链接:备忘录模式详解 (附java语言源码)
解释器模式(Interpreter Pattern):定义一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。(Given a language, define are presentation for its grammar along with an interpreter that uses there presentation to interpret sentences in the language.)
详细解释器模式介绍可点此链接:解释器模式详解 (没有附java语言源码)
状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。(Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.)
详细状态模式介绍可点此链接:状态模式详解 (附java语言源码)
策略模式(Strategy Pattern):定义一系列的算法,把它们一个个封装起来,并且使他们可相互替换。本模式使得算法的变化可以独立于使用它的客户。(Define a family of algorithms,encapsulate each one and make them interchangeable. Strategy lets the algorithmvary independently from clients that use it.)
详细策略模式介绍可点此链接:策略模式详解(用java语言实现策略模式)
责任链模式(Chain of Responsibility Pattern):为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它。(Avoid coupling the sender of a requestits receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until anobject handles it.)
详细责任链模式介绍可点此链接:责任链模式详解 (附java语言源码)
访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类别的前提下定义作用于这些元素的新操作。(Represent an operation to be performedon the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.)
详细访问者模式介绍可点此链接:访问者模式详解 (没有附java语言源码)
此外还有一些J2EE模式:这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。
下面用一个图片来整体描述一下设计模式之间的关系:
谢谢
安装 :
pip install pyinstaller==3.4
安装即可
PyInstaller 命令基本语法:
pyinstaller [options] script[script ...]|specfile
pyinstaller test.py
1 | 常规 |
基本用法
假定Python项目的主函数入口为main.py,则打包命令如下
pyinstaller -F main.py
-F参数大小写敏感
指定搜索路径,若有多个模块搜索路径需要指明
pyinstaller -F main.py -p /usr/local/python3/bin/python3 -p ./package
文档链接
https://media.readthedocs.org/pdf/pyinstaller/stable/pyinstaller.pdf
升级模块:pip install –upgrade 库名
官方参考:https://packaging.python.org/tutorials/packaging-projects/
参考文章:https://mp.weixin.qq.com/s/IZJfkfgDWSGNhuUJn6wRoQ
我的:https://pypi.org/ cuiyonghua cui1-A!
https://github.com/wistbean/learn_python3_spider
/Users/cuiyonghua/Desktop/my_work_files/softwares/mongodb/mongodata/etc/mongo.conf
init1
2
3
4from __future__ import absolute_import
from .xiaocui import *
name = "xiaocui"
xiaocui.py1
2
3
4
5
6
7
8
9
10
11
12# -*- coding: utf-8 -*-
def output():
print('hello,这是')
def output1(data):
print('hello,这是:{}'.format(data))
def susu(susu):
print('susu:{}'.format(susu))
setup.py:
这个文件主要是要告诉 setuptools ,我们的包里面的一些信息,比如名称啊,版本号啊,作者,邮箱等等1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# -*- coding: utf-8 -*-
import setuptools
with open("README.md", "r") as fh:
long_description = fh.read()
setuptools.setup(
name="xiaocui",
version="0.0.1",
author="xiaocui",
author_email="cui_yonghua6@163.com",
description="This is an cui package, fa li wu bian",
long_description=long_description,
long_description_content_type="text/markdown",
keywords="hello world example examples",
url="https://github.com/cuiyonghua6/cui_package",
packages=setuptools.find_packages(),
classifiers=[
'Programming Language :: Python :: 3',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
]
)
LICENCE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21MIT License
Copyright (c) 2020 cuiyonghua6
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
python3 -m pip install –user –upgrade setuptools wheel
python3 setup.py sdist bdist_wheel
https://pypi.org/account/register/
https://test.pypi.org/account/register/
python3 -m pip install –user –upgrade twine
(apt install twine)
python3 -m twine upload dist/*
1 | --name 包名称 |
下列entry_points中: console_scripts 指明了命令行工具的名称;在“redis_run = RedisRun.redis_run:main”中,等号前面指明了工具包的名称,等号后面的内容指明了程序的入口地址。1
2
3entry_points={'console_scripts': [
'redis_run = RedisRun.redis_run:main',
]}
1 |
|
标签(空格分隔): python PEP8 代码 规范
在日常工作中,编写python代码时,大家有可能因为IDE的不同或者是没有遵循python的pep8规范而导致每个人的格式都不尽相同,导致其他人阅读起来比较吃力。但是有时候代码规范也并不是建议使用的,最主要的是风格一致性,每个组内的代码风格统一起来才是最重要的,根据自己的判断选择是否遵循PEP8。
ps: 许多项目有自己的编码规范,在出现规范冲突时,项目自身的规范优先。
接下来我们只挑一些在工作中频繁遇到规范进行示例,为减少大家阅读时间,以 推荐 和 糟糕 来说明。
每一级缩进使用4个空格。
推荐:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26# 与左括号对齐
foo = long_function_name(var_one, var_two,
var_three, var_four)
# 用更多的缩进来与其他行区分
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
# 挂行缩进应该再换一行
foo = long_function_name(
var_one, var_two,
var_three, var_four)
# 与内容对齐
my_list = [
1, 2, 3,
4, 5, 6,
]
# 与第一行第一个字符对齐
my_list = [
1, 2, 3,
4, 5, 6,
]
糟糕:1
2
3
4
5
6
7
8
9
10
11# 没有使用垂直对齐时,禁止把参数放在第一行
foo = long_function_name(var_one, var_two,
var_three, var_four)
# 当缩进没有与其他行区分时,要增加缩进
def long_function_name(
var_one, var_two, var_three,
var_four):
print(var_one)
my_list = [1, 2, 3, 4, 5, 6]
所有行限制的最大字符数为79。
推荐:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30# 类与类之间前后用两个空行隔开
Class A:...
Class B:...
# 类中函数与函数之间前后用一个空行隔开
Class C:
def c_a(self):...
def c_b(self):...
# 函数与函数之间前后用两个空行隔开
def a_run():...
def b_run():...
# 在函数中使用空行来区分逻辑段(谨慎使用)。
def c_run():
# 逻辑A
...
...
# 逻辑B
...
...
推荐:
同时在每一组导入之间加入空行。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 官方标准库导入
import os
import sys
# 第三方库
import arrow
import requests
# 导入本地库
import app
# 以from导入标准库
from datetime import datetime
# 以from导入第三方库
from ldap3 import Server
# 以from导入本地库
from app import DB
from . import create_app # 处理绝对路径过长时可以以相对路径进行替换
糟糕:1
2# 在import中导入多个库
import sys, os
二元运算符中的空格:
推荐:1
2
3
4
5
6
7
8
9i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
糟糕:1
2
3
4
5
6
7
8
9i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)
关键字参数或者默认参数值:
推荐:1
2def complex(real, imag=0.0):
return magic(r=real, i=imag)
糟糕:1
2def complex(real, imag = 0.0):
return magic(r = real, i = imag)
当更新代码时,一定要记得同步更新注释,否则使阅读的人会陷入更糟糕的近况。
推荐:1
2
3
4"""Return a foobang
Optional plotz says to frobnicate the bizbaz first.
"""
大家在写函数或者方法时,往往会漏掉当前方法或函数的作用,其实这个还是很重要的,这样往往不需要阅读你的逻辑就可以知道你准备干什么
推荐:1
2
3
4
5
6
7
8
9
10
11
12"""
def oa_notice_template(project, api, account, cpu, mem):
"""
压测申请模板
:param project: 项目名称
:param api: 接口名称
:param account: 申请人
:param cpu: cpu核数
:param mem: 内存大小
:return:
"""
"""
在编写代码时,阅读者追寻编写人时往往很困难,或者此文件具体是做什么的。这个时候我们稍微添加一些个人信息注释就很好做到追源了。
推荐:1
2
3
4
5
6
7
8
9
10"""
@Description: 接口测试上传
@Author : duanfei
@Time : 2020/5/9 11:51 下午
@Site :
@File : http_test.py
"""
import os
...
命名规范很重要,很多时候你的命名能够大致的解释了变量、函数、类是用来做什么的。所以在命名的时候一定要选择贴近的词义,让阅读者可以理解
模块应该用简短全小写的名字,如果为了提升可读性,下划线也是可以用的。Python包名也应该使用简短全小写的名字,但不建议用下划线。
类名一般使用单词首字母大写的约定
推荐:1
class CheckFunc:...
糟糕:1
2
3
4
5
6# 首字符需大写,同时类名中无需带下划线
class check_func:...
# 全部大写,同时类名中无需带下划线
class CHECK_FUNC:...
函数名应该小写,如果想提高可读性可以用下划线分隔。
推荐:1
def check_func():...
一定要靠近变量的意思,不要使用一些意义不明的参数,如:i,j,k,特别注意永远不要使用字母‘l’(小写的L),‘O’(大写的O),或者‘I’(大写的I)作为单字符变量名。
糟糕:1
2
3
4
5l = []
i = 0
xxx = [for i in xx]
常量一般默认全部为大写, 同时一定要表明好注释
推荐:1
2
3
4TOTAL = 10 # 订单总页数
# 最大溢出量
MAX_OVERFLOW = 1000
因为异常一般都是类,所有类的命名方法在这里也适用。
推荐:1
2
3
4
5
6
7
8class ErrorInvalidArgument(ApiError):
"""
参数缺失或错误
"""
code = 401001
code_name = 'Invalid_Argument'
message = 'invalid argument.'
zh_message = '参数缺失或错误'
关于异常处理:
推荐:1
2
3
4
5
6try:
value = collection[key]
except KeyError:
return key_not_found(key)
else:
return handle_value(value)
糟糕:1
2
3
4try:
return handle_value(collection[key])
except KeyError:
return key_not_found(key)
关于返回结果处理:
不管在任何时候返回结果都需要保持一致。
推荐:1
2
3
4
5
6
7
8
9
10def foo(x):
if x >= 0:
return math.sqrt(x)
else:
return None
def bar(x):
if x < 0:
return None
return math.sqrt(x)
糟糕:1
2
3
4
5
6
7
8def foo(x):
if x >= 0:
return math.sqrt(x)
def bar(x):
if x < 0:
return
return math.sqrt(x)
关于True、Fakse的判断:
不要用 == 去和True或者False比较
推荐:1
2if greeting:
...
糟糕:1
2
3
4
5if greeting == True:
...
if greeting is True:
...
==================================================
规范—新手村(孙晓飞)
相信现代编译器的bug是很难遇到的
也就是说,当你的程序出现bug的时候,最后去怀疑编译器和系统(windows除外)
mr要有意义
最大也是最重要的原因是——在采用squash合入master的时候,mr的title会作为这次merge的commit信息,没有意义的mr==没有意义的commit。那么,为什么commit要有意义呢……去面壁吧,不说这个问题了……
不明白的代码,不要乱用!
不明白的代码,不要乱用! 不明白的代码,不要乱用! OK我说了三遍了
不要有过多输出
尤其是你开发的是一个包会被别人调用的情况下,因为别人连关都关不掉
没有经过profile过的程序做瓶颈优化都是耍流氓
profile的方法参见:(假装有东西,等写完放过来)
万恶之源
有的人说重复代码是万恶之源,有的人说过早的重构(或优化)是万恶之源 这两种说法虽然是矛盾的,但是都说出了部分的真相——我个人的偏好是:1
2
3
4
5
6
7
8
9
10
11
12
13if 存在重复代码 {
if 不需要使用interface(go和java里的interface,python里的抽象类,c++里的模板)就可以解决{
do 干他!
} else {
if 处于项目早期 {
项目优先
} else {
do 干他!
}
}
} else {
print(“大侠再见”)
}
尊重IDE
最重要的是尊重编译器的warning
代码不要给其他人造成心智负担
包括但不仅限于:
merge后的分支需要删除,无论本地还是远端,都要删除
不要用注释代码的方式保留老代码;注释要有意义
使用正确的变量名
(Python)使用variable annotation
减少中文的使用
包括但不仅限于,中文文档、CSDN、百度搜索等等
PyCharm 的doc string采用google style
原因包括但不仅限于:
不然的话会在群里看到自己要请大家喝奶茶的消息 :)
termius (windows用户强制,会折腾microsoft terminal的请忽略我)
source tree (mac和windows)ShannonWIKI
PyCharm的save action插件,在save的时候选择reformat以及optimize
GoLand的File Watchers里启用go fmt
每个项目都要要设置line seperator为Unix模式,也就是使用\n。windows用户要尤其注意。
除非你厉害,否则不要用vim或者emacs,人类发明很多工具是有理由的
使用IDE做VCS
绝对路径,之前提过了
除了config文件,项目中绝对不准使用绝对路径!!!!!!!
在任何地方,都不允许使用linux的相对路径,也就是”../“这种形式
解释一下正确做法:
项目中,数据分为两种:一种是不需要外部传入的数据,这类数据的路径一定是相对于项目根目录的路径的,具体做法是用Python的函数获取项目的路径,然后其他素有路径都是相对于这个录几个的;另一种是外部挂载的数据,一般是是大数据或者敏感数据,这类是将路径写在config中,然后将config忽略来做到的
不允许绝对路径,不允许赤裸裸的相对路径!!!!!!!!!!!!!!!
python代码,如果参数过多需要换行,建议采用这种形式:1
2
3
4
5function(
para_1,
para_2,
…
)
而不是:1
2
3function(para_1,
para_2,
…)
更不能:1
2
3function(para_1,
para_2
)
不要乱用字典
各位,很严肃的提醒,字典(python里的dict,go、C++、java里的map)这种数据结构,适用于存储key-value结构,而且是key不定的情况,如果key是确定的,最好声明一个类来存储,否则代码维护性极差,我们之前已经吃过亏了,不要再吃亏了。因此,以后如果key是确定的情况,严禁使用字典作为传参手段,尤其是python,不要把编程语言的字典当成json来用。
git的开发规范
从master上,新建分支,然后做修改,commit,push,远端merge后,checkout到master,然后拉取远端,然后进入下一轮开发。严禁在master上做修改,然后checkout到新分支,然后提交!!!!